﻿using System;
using System.Collections.Generic;

using System.Configuration;
using System.Data;
using System.Data.SqlClient;


using Galaxy.Vinder.BO;

namespace Galaxy.Vinder.DAL
{
    public class PortafolioDB
    {

        private static String connectionString = AppConfiguration.ConnectionString;

        public static Portafolio getPortafolio(int id)
        {
            Portafolio portafolio = null;
            String cmd = "select p.id p_id, p.titulo p_titulo, p.descripcion p_descripcion, s.id s_id, s.nombre s_nombre, s.descripcion s_descripcion, s.imagen s_imagen " +
            "from portafolio p inner join servicio s on p.servicioId=s.id where t.id= " + id;
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand(cmd, connection);
                command.CommandType = CommandType.Text;

                connection.Open();
                using (SqlDataReader myReader = command.ExecuteReader())
                {
                    if (myReader.Read())
                    {
                        portafolio = FillDataRecord(myReader);
                    }
                    myReader.Close();
                }
                connection.Close();
            }
            return portafolio;
        }

        public static List<Portafolio> getTodosLosPortafolios()
        {
            List<Portafolio> portafolios = null;
            String cmd = "select * from portafolio";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand(cmd, connection);
                command.CommandType = CommandType.Text;

                connection.Open();
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    if (reader.HasRows)
                    {
                        portafolios = new List<Portafolio>();
                        while (reader.Read())
                        {
                            portafolios.Add(FillDataRecord(reader));
                        }
                    }
                    reader.Close();
                }
                connection.Close();
            }
            return portafolios;
        }

        public static long salvar(Portafolio portafolio)
        {
            long insertID = -1;
            string sqlIns;
            bool insert = false;
            if (portafolio.Id == -1)
            {
                sqlIns = "INSERT INTO portafolio (nombre, titulo, tareas, url, fechaLanzamiento, descripcion, servicioId)" +
                "VALUES (@nombre, @titulo, @tareas, @url, @fechaLanzamineto, @descripcion, @servicioId)";
                insert = true;
            }
            else
            {
                sqlIns = "update portafolio set nombre=@nombre, titulo=@titulo, tareas=@tareas, " +
                "url=@url, fechaLanzamiento=@fechaLanzamiento, descripcion=@descripcion, servicioId=@servicioId where id=" + portafolio.Id;
            }

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand cmdIns = new SqlCommand(sqlIns, connection);
                connection.Open();
                cmdIns.Parameters.AddWithValue("@nombre", portafolio.Nombre);
                cmdIns.Parameters.AddWithValue("@titulo", portafolio.Titulo);
                cmdIns.Parameters.AddWithValue("@tareas", portafolio.Tareas);
                cmdIns.Parameters.AddWithValue("@url", portafolio.Url);
                cmdIns.Parameters.AddWithValue("@fechaLanzamiento", portafolio.FechaLanzamineto);
                cmdIns.Parameters.AddWithValue("@descripcion", portafolio.Descripcion);
                cmdIns.Parameters.AddWithValue("@servicioId", portafolio.Servicio.Id);
                try
                {
                    cmdIns.ExecuteNonQuery();
                }
                catch (SqlException error)
                {

                }

                cmdIns.Parameters.Clear();
                cmdIns.CommandText = "SELECT @@IDENTITY";
                if (insert)
                {
                    insertID = Convert.ToInt64(cmdIns.ExecuteScalar());
                }
                else
                {
                    insertID = portafolio.Id;
                }
                cmdIns.Dispose();
                cmdIns = null;
                connection.Close();
            }
            return insertID;
        }

        public static bool borrar(int id)
        {
            int result = 0;
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                String cmd = "delete from portafolio where id= " + id;
                SqlCommand command = new SqlCommand(cmd, connection);
                command.CommandType = CommandType.Text;
                connection.Open();
                result = command.ExecuteNonQuery();
                connection.Close();
            }
            return result > 0;
        }

        private static Portafolio FillDataRecord(IDataRecord data)
        {
            Portafolio portafolio = new Portafolio();
            portafolio.Servicio = new Servicio();

            portafolio.Id = data.GetInt64(data.GetOrdinal("p_id"));
            portafolio.Nombre= data.GetString(data.GetOrdinal("p_nombre"));
            if (!data.IsDBNull(data.GetOrdinal("p_titulo")))
            {
                portafolio.Titulo= data.GetString(data.GetOrdinal("p_titulo"));
            }
            if (!data.IsDBNull(data.GetOrdinal("p_tareas")))
            {
                portafolio.Tareas= data.GetString(data.GetOrdinal("p_tareas"));
            }
            if (!data.IsDBNull(data.GetOrdinal("p_url")))
            {
                portafolio.Url= data.GetString(data.GetOrdinal("p_url"));
            }
            if (!data.IsDBNull(data.GetOrdinal("p_fechaLanzamiento")))
            {
                portafolio.FechaLanzamineto= data.GetDateTime(data.GetOrdinal("p_fechaLanzamiento"));
            }
            if (!data.IsDBNull(data.GetOrdinal("p_descripcion")))
            {
                portafolio.Descripcion = data.GetString(data.GetOrdinal("p_descripcion"));
            }
            portafolio.Servicio.Id = data.GetInt64(data.GetOrdinal("s_id"));
            portafolio.Servicio.Nombre = data.GetString(data.GetOrdinal("s_nombre"));
            if (!data.IsDBNull(data.GetOrdinal("s_descripcion")))
            {
                portafolio.Servicio.Descripcion = data.GetString(data.GetOrdinal("s_descripcion"));
            }
            if (!data.IsDBNull(data.GetOrdinal("s_imagen")))
            {
                portafolio.Servicio.ImagePath = data.GetString(data.GetOrdinal("s_imagen"));
            }
            return portafolio;
        }
    }
}